export type ReturnFunction<T> = (x: number, y: number) => T;
/**
 * 创建一个二维数组，Matrix 在初始化阶段使用这个函数
 * @param defaultValue 描述默认的值是什么
 * @param creator 描述如何生成这个位置的值
 */
export function createMatrix<T = number>(
    height: number,
    width: number,
    defaultValue: T | ReturnFunction<T>,
    creator?: ReturnFunction<T>
) {
    return [...Array(height).keys()].map((y) =>
        [...Array(width).keys()].map((x) => {
            // 这里使用种子生成位置
            if (typeof creator === "function") {
                return creator(x, y);
            } else {
                if (typeof defaultValue === "function") {
                    return (defaultValue as ReturnFunction<T>)(x, y);
                } else {
                    return defaultValue;
                }
            }
        })
    );
}
